#---------------------------------------------------------------
# | File        :   uart.py                                    
# | Author      :   Waveshare team                              
# | Function    :   uart send and read                      
# | Info        :   uart test code                            
#---------------------------------------------------------------
# | This version:   V1.0                                        
# | Date        :   2022-03-15                                  
# | Info        :   Basic version                               
#---------------------------------------------------------------
from machine import UART, Pin
# import pico_gpio
import time

uart1 = UART(1, baudrate=9600, tx=Pin(33),rx=Pin(34),bits=8, stop=1)


def parse_frame_data(data):  
    # 假设一帧数据的格式为：帧头（1字节）+ 数据长度（2字节）+ 数据（n字节）+ 帧尾（1字节）  
  
    # 检查数据长度是否符合帧格式要求  
    if len(data) < 4:  
        return None, "数据长度不符合帧格式要求"  
  
    # 解析帧头  
    frame_head = data[0]  
    if frame_head != 0xAA:  # 假设帧头为0xAA  
        return None, "帧头不正确"  
  
    # 解析数据长度  
    data_length = (data[1] << 8) | data[2]  
    if data_length + 3 > len(data):  
        return None, "数据长度不正确"  
  
    # 解析数据  
    frame_data = data[3:3+data_length]  
  
    # 解析帧尾  
    frame_tail = data[-1]  
    if frame_tail != 0xBB:  # 假设帧尾为0xBB  
        return None, "帧尾不正确"  
  
    # 返回解析后的数据  
    return frame_data, None


def assemble_frame_data(data, frame_head=0xAA, frame_tail=0xBB):  
    # 将UTF-8格式的字符串转换为十六进制数据  
    hex_data = bytearray.fromhex(data.encode('utf-8').hex())  
  
    # 计算数据长度（假设数据长度为2字节）  
    data_length = len(hex_data)  
  
    # 检查数据长度是否超过最大允许长度  
    if data_length > 0xFFFF:  
        raise ValueError("数据长度超过最大允许值")  
  
    # 组装帧数据  
    frame_data = bytearray()  
    frame_data.append(frame_head)  # 添加帧头  
    frame_data.extend((data_length >> 8).to_bytes(1, 'big'))  # 添加数据长度的高8位  
    frame_data.extend((data_length & 0xFF).to_bytes(1, 'big'))  # 添加数据长度的低8位  
    frame_data.extend(hex_data)  # 添加十六进制数据  
    frame_data.append(frame_tail)  # 添加帧尾  
  
    return frame_data

def assemble_frame_data_taojingchi(data,  frame_tail=0xFF):  
    # 将UTF-8格式的字符串转换为十六进制数据  
    hex_data = bytearray.fromhex(data.encode('utf-8').hex())  
  
    # 计算数据长度（假设数据长度为2字节）  
    data_length = len(hex_data)  
  
    # 检查数据长度是否超过最大允许长度  
    if data_length > 0xFFFF:  
        raise ValueError("数据长度超过最大允许值")  
  
    # 组装帧数据  
    frame_data = bytearray()  
    frame_data.extend(hex_data)  # 添加十六进制数据  
    frame_data.append(frame_tail)  # 添加帧尾  
    frame_data.append(frame_tail)  # 添加帧尾
    frame_data.append(frame_tail)  # 添加帧尾  
    return frame_data
while True:
    print("111")
    uart1.write(assemble_frame_data_taojingchi('t0.txt="Hello World!"'))
#     uart1.write('t0.txt="Hello World!"')
    while(uart1.any()):      
        data = uart1.read()
        result =parse_frame_data(data)
        if (result[0] == None ):
          print(result[1])
        else:
          print(result[0].decode('UTF-8'))
    time.sleep_ms(1000)
    
